#include <REGX52.H>
#include "XPT2046.h"
#include "Delay.h"


sbit XPT2046_CS=P3^5;
sbit XPT2046_DCLK=P3^6;
sbit XPT2046_DIN=P3^4;
sbit XPT2046_DOUT=P3^7;

unsigned int XPT2046_ReadAd(unsigned char Command)
{
	unsigned int ADValue = 0;
	unsigned char i;
	
	XPT2046_DCLK = 0;		//注意:在时序图里在CS=0之前DCLK已经为0
	XPT2046_CS = 0;
	
	/*发送*/
	for(i=0; i<8; i++){
		XPT2046_DIN = Command & (0x80 >> i); //高位优先，高位先发送
		XPT2046_DCLK = 1;	//时钟拉高，给一个时钟上升沿
		XPT2046_DCLK = 0;	//时钟拉低
	}
	
	
	/*接收*/
	for(i=0; i<16; i++){
		XPT2046_DCLK = 1;
		XPT2046_DCLK = 0;
		
		//Bilibili网站弹幕提到如果ADC值不能到254，需要再这里延时1ms
		Delay(1);
		
		if(XPT2046_DOUT)
			ADValue |= (0x8000 >> i); //高位优先，高位先接收
	}
	
	//当选择XPT2046 ADC转换的量程为8位的时候,我们读取的16位需要左移8位
	//当选择XPT2046 ADC转换的量程为12位的时候,我们读取的16位需要左移4位
	if(Command & 0x08)
		return (ADValue >> 8);
	else
		return (ADValue >> 4);
		
	return ADValue;
}